package br.unirio.ticketnator.action;

import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;

import br.unirio.ticketnator.dao.DAOFactory;
import br.unirio.ticketnator.model.Ticket;
import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class TicketService extends ActionSupport implements RequestAware {

    private static final long serialVersionUID = -44436774868684L;
    public static final int TAMANHO_PAGINA = 25;
    private Map request;
    private int currentId;
    private int currentPage;
    private String titulo;
    private String nomeComponente;
    private String nomeSistema;
    private String descricao;
    private int status;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    /**
     * Inicializa o servico de manipulacao de ticket.
     */
    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getComponente() {
        return nomeComponente;
    }

    public void setComponente(String nomeComponente) {
        this.nomeComponente = nomeComponente;
    }

    public String getSistema() {
        return nomeSistema;
    }

    public void setSistema(String Sistema) {
        this.nomeSistema = Sistema;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public TicketService() {
        this.currentId = -1;
        this.currentPage = 0;
        request = ActionContext.getContext().getSession();
    }

    /**
     * Indica a memoria de requisicao para a acao.
     */
    @Override
    public void setRequest(Map<String, Object> arg0) {
        this.request = arg0;
    }

    /**
     * "Setta" o id de um usuario
     */
    public void setId(int id) {
        this.currentId = id;
    }

    public void setPage(int pagina) {
        this.currentPage = pagina;
    }

    /**
     * Determina se existe uma pagina anterior
     */
    public boolean hasPreviousPage() {
        return currentPage > 0;
    }

    /**
     * Retorna a pagina anterior
     */
    public int getPreviousPage() {
        return hasPreviousPage() ? currentPage - 1 : 0;
    }

    /**
     * Verifica a existencia de uma proxima pagina
     */
    public boolean hasNextPage() {
        int contador = DAOFactory.getTicketDAO().conta();
        return contador > (currentPage + 1) * TAMANHO_PAGINA;
    }

    /**
     * Retorna a proxima pagina
     */
    public int getNextPage() {
        return hasNextPage() ? currentPage + 1 : currentPage;
    }

    /**
     * Cria um Ticket
     */
    public String criaTicket() {
        request.put("ticket", new Ticket());
        return INPUT;
    }

    /**
     * Edita um ticket
     */
    public String editaTicket() {
        request.put("ticket", DAOFactory.getTicketDAO().getTicket(currentId));
        return INPUT;
    }

    /**
     * Deleta ticket
     */
    public String deletaTicket() {
        DAOFactory.getTicketDAO().removeTicketDAO(currentId);
        return SUCCESS;
    }

    /**
     * Salva as alteracoes do ticket que foi editado
     */
    public String salvaTicket() {
        Ticket t = new Ticket();
        t.setDescricao(descricao);
        t.setNomeOperadorResponsavel(nomeComponente);
        t.setIdSistemaCorrespondente(DAOFactory.getTicketDAO().getIdSistemaByNome(nomeSistema));
        t.setTitulo(titulo);
        t.setStatus(status);
        request.put("ticket", t);

        if (titulo.length() == 0) {
            addFieldError(titulo, "Campo Obrigatorio");
            return INPUT;
        }
        
        if (nomeComponente.length() == 0){
            addFieldError(nomeComponente, "Campo Obrigatorio");
            return INPUT;
        }
        
        if (descricao.length() == 0){
            addFieldError(descricao, "Campo Obrigatorio");
            return INPUT;
        }
        
        if(nomeSistema.length()==0){
            addFieldError(descricao, "Campo Obrigatorio");
            return INPUT;
        }


        if (t.getIdTicket() <= 0) {
            DAOFactory.getTicketDAO().insereTicketDAO(t);
        } else {
            DAOFactory.getTicketDAO().atualizaTicketDAO(t);
        }
        

        return SUCCESS;


    }
}
